//先载入一个模块配置文件，成功后，再载入需要的模块
//Common中包含了一些通用函数，比如判断js文件是否存在等。
//注意Element中define(['vue']),所以对vue引用不能使用首字大写
require(['Resource/Script/requireJs/_require.config.js?v='+Math.random()],function(){
  require(['vue','Common','axios'],function(vue,Common,axios){
    //用来放置表单项的缓存,无法直接修改opt.data中的变量，所以通过这个缓存来修改
    var _FormItems_ = null;
    var _FormRules_ = null;
    var _FormAction_ = null;

    if(!varTemplate.row || Array.isArray(varTemplate.row)) {
      varTemplate.row = {};
    }

    var opt = {
        el: '#div1',
        // components:Common.userComponents,

        components:null,
        data: function() {
          return {
            inputTest : '',
            //提交按钮是否禁用
            disableSubmit : false,
            //当前记录，模板变量传入
            row : varTemplate.row,
            //表单标题
            formTitle :varTemplate.title,
            //表单项
            formItems:[],
            //表单验证
            rules:null,
            //提交数据action
            action:_FormAction_,
            //回调接口集合
            callbacks:{},
          }
        },
        methods:{
          handleInput : function(row,key,val){
            if(row[key]) row[key]=val;
            else {
              vue.set(row,key,val);
            }
            // row[item.name]=arguments[0]
          },
          //表单提交事件
          submitForm(formName) {
            this.$refs[formName].validate((valid) => {
              if (!valid) {
                console.log('表单验证失败!!');
                return false;
              }
              this.disableSubmit = true;
              console.log('form submit fired,params',this.row);
              this.$http.post(this.action,this.row).then((res)=>{

                setTimeout(() => {
                  this.disableSubmit = false;
                }, 2000);

                if(!res.data.success) {
                  this.$notify.error({
                    'title':'失败',
                    'message':res.data.msg ? res.data.msg : 'response.data.success not found'
                  });
                  // this.$message('response.data.success not found','error');
                  console.log(res);
                  return false;
                }
                this.$notify.success({
                  title:'成功',
                  message:res.data.msg,
                });
                // this.$message(res.data.msg,'success');
                if(res.data.targetUrl) {
                  setTimeout(function(){
                    window.location.href = res.data.targetUrl;
                  },this.redirectTime);
                }
              }).catch(function (error) {
                this.$notify.error({
                  'title':'请求失败',
                  'message':'请求失败,检查url或者其他设置'
                });
                // this.$message('请求失败,检查url或者其他设置','error');

                this.disableSubmit = false;
              });
            });
          },
          //表单重置
          resetForm(formName) {
            this.$refs[formName].resetFields();
          }
        },
        mounted : function() {
          this.formItems=_FormItems_;
          this.rules=_FormRules_;
          //载入sonTpl
          Common.setSontpl.apply(this,[varTemplate]);
          // Common.setSontpl(varTemplate);
          // var _this = this;
          // require([_tplPath_+'/'+varTemplate.sonTpl],function(ev){
          //   _this.callbacks = ev;
          //   if(ev.main) {
          //     ev.main.apply(_this);
          //   }
          // },function(err){
          //   console.log('sontpl不存在')
          // });
        }
    };

    //ajax获得表单参数,覆盖配置文件的 compnents 属性
    var prm = new Promise( function(resolve,reject) {
      //如果存在 formItems 模板变量，直接赋值，否则ajax获取
      if(varTemplate.formItems) {
        return resolve(varTemplate.formItems);
      }
      var act = varTemplate.urlGetItems || 'MainFormItems';
      var url=`?controller=${varTemplate.controller}&action=${act}`;
      var params={};
      axios.post(url,params).then((res)=>{
        if(!res.data.success) {
          dump('get form items failed',res.data);
          return false;
        }
        return resolve(res.data);
      });
    });

    prm.then(function(res){
      //开始处理components属性
      _FormItems_ = res.items;
      _FormRules_ = res.rules||null;
      _FormAction_ = res.action||'';

      //使用eval动态加载异步组件
      var temp = "";
      //需要使用到comp-card组件
      var items = [{type:'comp-card'} , ...res.items];

      //下面被注释的代码导致引用地址的原始数据改变，出现了表单阻止错误的bug
      for(var i=0;items[i];i++) {
        temp = temp +`'${items[i].type}':resolve=>require(['_vue!pathComponent/${items[i].type}'], resolve),`;
      }
      opt.components = eval(`({${temp}})`);

      //开始渲染
      new vue(opt);
    },function(err){
        dump('prm reject fired',err);
    });

    /*var act = varTemplate.urlGetItems || 'MainFormItems';
    var url=`?controller=${varTemplate.controller}&action=${act}`;
    var params={};
    axios.post(url,params).then((res)=>{
      if(!res.data.success) {
        dump('get form items failed',res.data);
        return false;
      }
      //开始处理components属性
      _FormItems_ = res.data.items;
      _FormRules_ = res.data.rules||null;
      _FormAction_ = res.data.action||'';

      //使用eval动态加载异步组件
      var temp = "";
      //需要使用到comp-card组件
      var items = [{type:'comp-card'} , ...res.data.items];
      // var items = [{type:'comp-card'}];
      // items = items.concat(res.data.items);

      //下面被注释的代码导致引用地址的原始数据改变，出现了表单阻止错误的bug
      // var items = res.data.items;
      // items.push({type:'comp-card'});
      for(var i=0;items[i];i++) {
        // var temp += '_vue!Jichu/TestAsync/Components/'+items[i].type;
        // opt.components[items[i].type] = resolve=>require([temp], resolve);
        temp = temp +`'${items[i].type}':resolve=>require(['_vue!pathComponent/${items[i].type}'], resolve),`;
      }
      // dump(temp);
      opt.components = eval(`({${temp}})`);

      //开始渲染
      new vue(opt);
    });*/
  })
});


